#include <windows.h>
#include <iostream>
#include <thread>
using namespace std;

void output(int i) {
    cout << i << endl;
}


class foo {
public:
    void bar1(int n) {
        this_thread::sleep_for(chrono::seconds(10));
        cout << "** " << this_thread::get_id() << endl;
        cout << "n = " << n << endl;
    }
    static void bar2(int n) {
        Sleep(10);
        cout << "** " << this_thread::get_id() << endl;
        cout << "static function is running" << endl;
        cout << "n = " << n << endl;
    }
};

int main() {
    foo f;
    thread t1(&foo::bar1, &f, 5);  //注意在调用非静态类成员函数时，需要加上实例变量。
    cout << t1.get_id() << endl;
    t1.join();

    thread t2(&foo::bar2, 4);
    cout << t2.get_id() << endl;
    t2.join();
}


// int main() {
//     for (uint8_t i = 0; i < 5; i++) {
//         //创建一个线程t，第一个参数为调用的函数，第二个参数为传递的参数
//         thread t(output, i);
//         //表示允许该线程在后台运行
//         // t.detach();

//         // 等待关联的线程完成，才会继续执行join()后的代码。
//         t.join();
//     }

//     return 0;
// }